#include "Head.h"

Flight_data data[7] =
    {
        {1, "Boeing_737", "北京", "上海", {8, 30}, {10, 45}, "2h15m", 800, 180, 180, 'n'},
        {2, "Airbus_A320", "广州", "深圳", {9, 15}, {10, 00}, "45m", 400, 150, 150, 'n'},
        {3, "Boeing_787", "成都", "重庆", {11, 00}, {11, 50}, "50m", 500, 220, 220, 'n'},
        {4, "Airbus_A330", "南京", "杭州", {13, 30}, {14, 30}, "1h", 600, 200, 200, 'n'},
        {5, "Boeing_777", "上海", "北京", {15, 00}, {17, 10}, "2h10m", 900, 240, 240, 'n'},
        {6, "Airbus_A350", "深圳", "广州", {16, 45}, {17, 30}, "45m", 450, 160, 160, 'n'},
        {7, "Boeing_747", "西安", "武汉", {19, 00}, {20, 20}, "1h20m", 700, 300, 300, 'n'}};
User_data data_1[3] =
    {
        {"张三", "123", 1000, Reg},
        {"李四", "123", 1000, Reg},
        {"王五", "123", 1000, Reg}};

const wchar_t *title_login = {L"用户登录界面"};
const wchar_t *choices_login[] = {
    L"选项1 - 登录",
    L"选项2 - 注册"};

int main(int argc, char const *argv[])
{
    // ========================= 创表 =========================

    // 创建航班信息双向循环链表
    Flight_Head_Node *Head_fli_data = Init_dlist();

    // 创建管理员链表
    User_Head_Node *Head_adm_user = Init_List();
    // 创建普通用户链表
    User_Head_Node *Head_reg_user = Init_List();
    // 创建白银用户链表
    User_Head_Node *Head_sil_user = Init_List();
    // 创建黄金用户链表
    User_Head_Node *Head_gol_user = Init_List();
    // 创建白金用户链表
    User_Head_Node *Head_pla_user = Init_List();

    // 创建所有用户链表
    User_Head_Node *Head_all_user = Init_List();

    // ========================= 插表 =========================
    
        // User_data data = {.user = "刘老二" , .pas = "123" , .balance = 0 , .Account_level = Adm};
        // Insert_List(Head_adm_user , data , 1);
        // File_Printf_User(Head_adm_user , ADMIN_FILE);
        // for (size_t i = 0; i < 7; i++)
        // {
        //     Insert_dlist(Head_fli_data , data[i] , i+1);
        // }
        // File_Printf_Flight(Head_fli_data);

    // ======================= 读取文件 =======================

    // 读取普通用户文件
    File_Scanf_User(Head_reg_user, REGULAR_FILE);
    // 读取白银用户文件
    File_Scanf_User(Head_sil_user, SILVER_FILE);
    // 读取黄金用户文件
    File_Scanf_User(Head_gol_user, GOLD_FILE);
    // 读取白金用户文件
    File_Scanf_User(Head_pla_user, PLATINUM_FILE);
    // 读取管理员文件
    File_Scanf_User(Head_adm_user, ADMIN_FILE);

    // 读取航班信息文件
    File_Scanf_Flight(Head_fli_data);

    // ========================= 合表 =========================

    Merge_List(Head_all_user, Head_reg_user);
    Merge_List(Head_all_user, Head_sil_user);
    Merge_List(Head_all_user, Head_gol_user);
    Merge_List(Head_all_user, Head_pla_user);
    Merge_List(Head_all_user, Head_adm_user);

    // 写入总用户信息文件
    File_Printf_User(Head_all_user, ALL_USER);

    // ======================= 登录注册 =======================

    int mode = display_menu(title_login, choices_login, 2);
    if (mode == 1)
    {
        Log_in(Head_all_user, Head_fli_data);
    }
    else if (mode == 2)
    {
        Sign_up(Head_reg_user, Head_all_user, Head_fli_data);
    }

    // ========================= 分表 =========================

    // 读取总用户文件信息
    File_Scanf_User(Head_all_user, ALL_USER);

    // 循环遍历 插入各用户链表
    User_Node *ptr = Head_all_user->next;

    // 清空之前的链表信息
    Empty_List(Head_reg_user);
    Empty_List(Head_sil_user);
    Empty_List(Head_gol_user);
    Empty_List(Head_pla_user);
    Empty_List(Head_adm_user);

    for (size_t i = 0; ptr != NULL; i++)
    {

        // 判断用户级别
        if (!strcmp(ptr->data.Account_level, Reg)) // 普通用户
        {
            // =========== 写入用户信息 ===========
            Insert_List(Head_reg_user, ptr->data, 1);
            // =========== 写入航班信息 ===========
            User_Node *ptr_reg = Find_By_Name(Head_reg_user, ptr->data.user);
            for (size_t j = 0; j < ptr->data.Order->len; j++)
            {
                Insert_Sql_list(ptr_reg->data.Order, ptr->data.Order->Order_Data[j]);
            }
        }
        else if (!strcmp(ptr->data.Account_level, Sil)) // 白银用户
        {
            // =========== 写入用户信息 ===========
            Insert_List(Head_sil_user, ptr->data, 1);
            // =========== 写入航班信息 ===========
            User_Node *ptr_sil = Find_By_Name(Head_sil_user, ptr->data.user);
            for (size_t j = 0; j < ptr->data.Order->len; j++)
            {
                Insert_Sql_list(ptr_sil->data.Order, ptr->data.Order->Order_Data[j]);
            }
        }
        else if (!strcmp(ptr->data.Account_level, Gol)) // 黄金用户
        {
            // =========== 写入用户信息 ===========
            Insert_List(Head_gol_user, ptr->data, 1);
            // =========== 写入航班信息 ===========
            User_Node *ptr_gol = Find_By_Name(Head_gol_user, ptr->data.user);
            for (size_t j = 0; j < ptr->data.Order->len; j++)
            {
                Insert_Sql_list(ptr_gol->data.Order, ptr->data.Order->Order_Data[j]);
            }
        }
        else if (!strcmp(ptr->data.Account_level, Pla)) // 白金用户
        {
            // =========== 写入用户信息 ===========
            Insert_List(Head_pla_user, ptr->data, 1);
            // =========== 写入航班信息 ===========
            User_Node *ptr_pla = Find_By_Name(Head_pla_user, ptr->data.user);
            for (size_t j = 0; j < ptr->data.Order->len; j++)
            {
                Insert_Sql_list(ptr_pla->data.Order, ptr->data.Order->Order_Data[j]);
            }
        }
        else if (!strcmp(ptr->data.Account_level, Adm)) // 管理员用户
        {
            // =========== 写入用户信息 ===========
            Insert_List(Head_adm_user, ptr->data, 1);
            // =========== 写入航班信息 ===========
            User_Node *ptr_adm = Find_By_Name(Head_adm_user, ptr->data.user);
            for (size_t j = 0; j < ptr->data.Order->len; j++)
            {
                Insert_Sql_list(ptr_adm->data.Order, ptr->data.Order->Order_Data[j]);
            }
        }
        ptr = ptr->next;
    }

    // 各用户分别写入文件
    File_Printf_User(Head_reg_user, REGULAR_FILE);  // 普通用户
    File_Printf_User(Head_sil_user, SILVER_FILE);   // 白银用户
    File_Printf_User(Head_gol_user, GOLD_FILE);     // 黄金用户
    File_Printf_User(Head_pla_user, PLATINUM_FILE); // 白金用户
    File_Printf_User(Head_adm_user, ADMIN_FILE);    // 管理员

    // ========================= 销毁 =========================

    // 销毁航班双循环链表
    Free_dlist(&Head_fli_data);
    // 销毁管理员链表
    Free_List(&Head_adm_user);
    // 销毁普通用户链表
    Free_List(&Head_reg_user);
    // 销毁白银用户链表
    Free_List(&Head_sil_user);
    // 销毁黄金用户链表
    Free_List(&Head_gol_user);
    // 销毁白金用户链表
    Free_List(&Head_pla_user);
    // 销毁所有用户链表
    Free_List(&Head_all_user);

    return 0;
}
